﻿using System;
using System.Data.SqlClient;
using System.Collections.Generic;
using Business_Entity;
using System.Data.SqlClient;
using System.Data;
using System.Windows.Forms;
namespace DAOFactory
{
	/// <summary>
	/// Description of DAOProveedor.
	/// </summary>
	public class DAOProveedor
	{
		public DAOProveedor()
		{
		}
        public  List<BEProveedor> getBDProvxProd(int idProducto)
        {
        	
	        	List<BEProveedor> lstProveedores=new List<BEProveedor>();
	        	String sql="select b.idProveedor,b.RazonSocial,b.RUC,b.nombreContacto from PRODUCTOXPROVEEDOR a,PROVEEDOR b where "+ 
				"a.idProveedor=b.idProveedor and a.idProducto="+idProducto;
	        	
	//        	SqlCommand cmd = new SqlCommand("COMPRAS_BUSCAR_PROVEEDORXPRODUCTO_M", ConnectionManager.getConnection());
	//            cmd.CommandType = CommandType.StoredProcedure;
	//            cmd.Parameters.Add("@CodigoProd", SqlDbType.Int);
	//            
	//            cmd.Parameters["@CodigoProd"].Value = idProducto;
				SqlCommand cmd=new SqlCommand(sql,ConnectionManager.getConnection());
	            SqlDataReader reader = cmd.ExecuteReader();
	            while (reader.Read())
	            {
	            	
	            	BEProveedor m=new BEProveedor();
	//            	String RazonSocial = reader[0].ToString();
	//            	int id=int.Parse(reader[1].ToString());
	//            	m.IdProv=id;
	//            	m.RazonSocial=RazonSocial;
					int id=reader.GetInt32(0);
					String RSocial=reader.GetString(1);
					String Ruc=reader.GetString(2);
					String nombreContacto=reader.GetString(3);
					m.IdProv=id;
					m.Contacto=nombreContacto;
					m.Ruc=Ruc;
					m.RazonSocial=RSocial;
	                lstProveedores.Add(m);
	            }
	            reader.Close();
	            return lstProveedores;
	            
        	
	            
        }
		
        
        //FIORELLA
        public  List<BEProveedor> getProvXProductoFiorella(int idProducto)
        {
        	
        		List<BEProveedor> lstProveedores=new List<BEProveedor>();
	        	String sql="select b.idProveedor,b.RazonSocial,b.RUC,b.nombreContacto from PRODUCTOXPROVEEDOR a,PROVEEDOR b where "+ 
				"a.idProveedor=b.idProveedor and a.estado='HABILITADO' and a.idProducto="+idProducto;
				SqlCommand cmd=new SqlCommand(sql,ConnectionManager.getConnection());
	            SqlDataReader reader = cmd.ExecuteReader();
	            while (reader.Read())
	            {
	            	
	            	BEProveedor m=new BEProveedor();
					int id=reader.GetInt32(0);
					String RSocial=reader.GetString(1);
					String Ruc=reader.GetString(2);
					String nombreContacto=reader.GetString(3);
					m.IdProv=id;
					m.Contacto=nombreContacto;
					m.Ruc=Ruc;
					m.RazonSocial=RSocial;				
	                lstProveedores.Add(m);
	            }
	            reader.Close();
	            return lstProveedores;
           
        }
        
        public  int AddDBProveedor(BEProveedor beP)
        {
           try{
        	String cmdStr = "insert into PROVEEDOR values(\'" + beP.Ruc + "\',\'" + beP.RazonSocial + "\',\'" + beP.Direccion + "\',\'" + beP.Telefono + "\',\'" + beP.Contacto + "\',\'" + beP.TelefonoContacto + "\',\'" + beP.Estado + "\' );";
            SqlCommand cmd = new SqlCommand(cmdStr, ConnectionManager.getConnection());
            cmd.ExecuteNonQuery();
            return 1;
            }catch(Exception ex){
				return 2;
			}
        }

        public  int AddDBProductoxProveedor(BEProductoProveedorCompras bePxP)
        {
            try{
        	String cmdStr = "insert into PRODUCTOXPROVEEDOR values(\'" + bePxP.CodigoProducto + "\',\'" + bePxP.CodigoProveedor + "\',\'" + bePxP.Precio + "\');";
            SqlCommand cmd = new SqlCommand(cmdStr, ConnectionManager.getConnection());
            cmd.ExecuteNonQuery();
        	 return 1;
        	}
        	catch{
        		return 2;//MessageBox.show("El producto ya esta agregado.");
        	
        	}
        }
        
        public int nuevoProdProv(BEProductoProveedorCompras bePxP){
        	String cmdSQL = "SELECT COUNT(*) FROM PRODUCTOXPROVEEDOR WHERE IDPRODUCTO=" + bePxP.CodigoProducto + " AND IDPROVEEDOR=" +bePxP.CodigoProveedor + ";";
        	SqlCommand cmd = new SqlCommand(cmdSQL, ConnectionManager.getConnection());        	
        	int cant = 0;
        	SqlDataReader res = null;
        	//VERIFICAMOS SI ESA RELACION PRODUCTO PROVEEDOR YA EXISTIA PARA SOLO CAMBIARLE EL ESTADO A HABILITADA
        	try{
        		res = cmd.ExecuteReader();
        		while(res.Read()){
        			cant = Int32.Parse(res[0].ToString());
        		}
        	}
        	catch{
        		cant = 0;        		
        	}
        	res.Close();
        	
        	try{
        		if(cant==0){
		        	String cmdStr = "insert into PRODUCTOXPROVEEDOR values(\'" + bePxP.CodigoProducto + "\',\'" + bePxP.CodigoProveedor + "\',\'" + bePxP.Precio + "\','HABILITADO ');";
		            cmd = new SqlCommand(cmdStr, ConnectionManager.getConnection());
		            cmd.ExecuteNonQuery();
		            return 1;
        		}
        		else{
        			String cmdStr = "UPDATE PRODUCTOXPROVEEDOR SET ESTADO='HABILITADO',Precio=\'" +bePxP.Precio + " \' WHERE IDPRODUCTO=" + bePxP.CodigoProducto + " AND IDPROVEEDOR=" + bePxP.CodigoProveedor+ ";";
		            cmd = new SqlCommand(cmdStr, ConnectionManager.getConnection());
		            cmd.ExecuteNonQuery();
		            return 1;
        		}
        	}
        	catch{
        		return 2;//MessageBox.show("El producto ya esta agregado.");        	
        	}
        }

        public  void DeleteDBProveedor(int id)
        {	
            String cmdStr = "UPDATE PROVEEDOR set Estado =\'" + "D" + "\' WHERE idProveedor =\'" + id + "\'";
            SqlCommand cmd = new SqlCommand(cmdStr, ConnectionManager.getConnection());
            cmd.ExecuteNonQuery();
            cmdStr = "UPDATE PRODUCTOXPROVEEDOR set ESTADO =\'" + "ELIMINADO" + "\' WHERE idProveedor =\'" + id + "\' ";
            // "DELETE from PRODUCTOXPROVEEDOR WHERE idProveedor =\'" + id + "\' ";
            cmd = new SqlCommand(cmdStr, ConnectionManager.getConnection());
            cmd.ExecuteNonQuery();
           

        }

        public  void DeleteDBProducto(int idPr, int idProv)
        {
        	
        	String cmdStr = "UPDATE PRODUCTOXPROVEEDOR set ESTADO =\'" + "ELIMINADO" + "\' WHERE idProducto =\'" + idPr + "\' AND idProveedor =\'" + idProv + "\' ";
            SqlCommand cmd = new SqlCommand(cmdStr, ConnectionManager.getConnection());
            cmd.ExecuteNonQuery();
			
        }

        public  int UpdateDBProveedor(BEProveedor beP)
        {   //MessageBox.Show("ENTROO");
            //MessageBox.Show("datos "+beP.Ruc+ " "+ beP.RazonSocial+" "+ beP.Direccion+" "+ beP.Telefono+" "+beP.Contacto+" "+ beP.TelefonoContacto+" "+ beP.Estado);
            
	            String cmdStr = "update PROVEEDOR set  RUC =\'" + beP.Ruc + "\', RazonSocial =\'" + beP.RazonSocial + "\',direccion =\'" + beP.Direccion + "\',telefono=\'" + beP.Telefono + "\', nombreContacto=\'" + beP.Contacto + "\',telefonoContacto=\'" + beP.TelefonoContacto + "\',Estado=\'" + beP.Estado + "\' where idProveedor = \'" + beP.IdProv + "\'";
	            SqlCommand cmd = new SqlCommand(cmdStr, ConnectionManager.getConnection());
	            cmd.ExecuteNonQuery();
	            return 1;
           
        }

        public  BEProveedor getProveedor(int id)
        {
            return null;
        }


        public  List<BEProveedor> getProveedores(String BCodigo, String BRuc, String BRazon, String BContacto)
        {
        	
	        	List<BEProveedor> lista = new List<BEProveedor>();
	
	            String QCodigo, QRUC, QRazon, QContacto, QUERYPrincipal, QEstado;
	            bool primero = true;
	            QCodigo = " idProveedor LIKE \'" +"%"+ BCodigo +"%"+ "\'";
	            QRUC = " RUC LIKE \'" +"%"+ BRuc +"%"+ "\'";
	            QRazon = " RazonSocial LIKE \'" +"%"+ BRazon +"%"+ "\'";
	            QContacto = " nombreContacto LIKE \'" +"%"+ BContacto +"%"+ "\'";
	            QEstado = " Estado= \'A\'";
	
	            if (BCodigo == "") QCodigo = ""; else if (primero) primero = false; else QCodigo = " AND " + QCodigo;
	            if (BRuc == "") QRUC = ""; else if (primero) primero = false; else QRUC = " AND " + QRUC;
	            if (BRazon == "") QRazon = ""; else if (primero) primero = false; else QRazon = " AND " + QRazon;
	            if (BContacto == "") QContacto = ""; else if (primero) primero = false; else QContacto = " AND " + QContacto;
	            if (!primero) QEstado = " AND " + QEstado;
	            QUERYPrincipal = "Select * FROM PROVEEDOR WHERE " + QCodigo + QRUC + QRazon + QContacto + QEstado;
	            if (primero) QUERYPrincipal = "Select * FROM PROVEEDOR WHERE Estado= \'A\' ";
	
	            //MessageBox.Show(""+QUERYPrincipal);
	
	            String cmdStr = QUERYPrincipal + ";";
	            SqlCommand cmd = new SqlCommand(cmdStr, ConnectionManager.getConnection());
	
	            SqlDataReader reader = cmd.ExecuteReader();
	
	            while (reader.Read())
	            {
	                int codigo = (int)(reader[0]);
	                String ruc = reader[1].ToString();
	                String razonSocial = reader[2].ToString();
	                String direccion = reader[3].ToString();
	                String telefono = reader[4].ToString();
	                String contacto = reader[5].ToString();
	                String telfContacto = reader[6].ToString();
	                Char estado = reader[7].ToString()[0];
	
	                lista.Add(new BEProveedor(codigo, ruc, razonSocial, direccion, telefono, contacto, telfContacto, estado));
	            }
	            reader.Close();
	
	            return lista;
	          
        }

        public List<BEProductoProveedorCompras> getProveedorProducto(int id, bool si)
        {
        	
        	List<BEProductoProveedorCompras> lista = new List<BEProductoProveedorCompras>();
            String cmdStr = "";

            if (si == true)
            {
                cmdStr += "SELECT * FROM PRODUCTOXPROVEEDOR WHERE idProveedor =" + id + "";
            }
            else
            {
                cmdStr += "SELECT * FROM PRODUCTOXPROVEEDOR";// WHERE idProveedor !=" + id + "";
            }

            SqlCommand cmd = new SqlCommand(cmdStr, ConnectionManager.getConnection());

            SqlDataReader reader = cmd.ExecuteReader();

            while (reader.Read())
            {
                int codigoProd = (int)(reader[0]);
                int codigoProv = (int)(reader[1]);
                float precio = (float)Convert.ToDouble(reader[2].ToString());

                lista.Add(new BEProductoProveedorCompras(codigoProd, codigoProv, precio));
            }
            reader.Close();

            return lista;
        	
        	
        }

        public List<BEProducto> getProductos(String BCodigo, String BNombre, String BTipo)
        {
        	
            String QCodigo, QNombre, QTipoDescripcion,QEstado;
            bool primero = false;
            QCodigo = " p.idProducto  LIKE \'" +"%"+ BCodigo + "%" + "\'";
            QNombre = " p.Nombre LIKE \'" +"%"+ BNombre + "%" + "\'";
            QTipoDescripcion = " t.Descripcion LIKE \'" +"%"+ BTipo + "%" + "\'";
			QEstado = " p.Estado= \'HABILITADO\'";
            
            if (BCodigo == "") QCodigo = ""; else if (primero) primero = false; else QCodigo = " AND " + QCodigo;
            if (BNombre == "") QNombre = ""; else if (primero) primero = false; else QNombre = " AND " + QNombre;
            if (BTipo == "") QTipoDescripcion = ""; else if (primero) primero = false; else QTipoDescripcion = " AND " + QTipoDescripcion;
			QEstado = " AND " + QEstado;

            List<BEProducto> lista = new List<BEProducto>();

            String QueryPrincipal = " SELECT	p.idProducto pcodigo, " +
                                "t.idTipoProducto tpcodigo, " +
                                "t.Descripcion tpdescripcion, " +
                                "p.Nombre pnombre, " +
                                "p.Descripcion pdescripcion, " +
                                "p.idUnidadProducto punidad, " +
                                "p.Estado pestado " +
                                "FROM TIPOPRODUCTO t " +
                                "INNER JOIN PRODUCTO p ON t.idTipoProducto= p.idTipoProducto " + QCodigo + QNombre + QTipoDescripcion+ QEstado;
            String cmdStr = QueryPrincipal;
            SqlCommand cmd = new SqlCommand(cmdStr, ConnectionManager.getConnection());
            //MessageBox.Show(QueryPrincipal);
            SqlDataReader reader = cmd.ExecuteReader();

            while (reader.Read())
            {
                int codigo = (int)(reader[0]);
                int tpcodigo = (int)(reader[1]);
                String tpdescripcion = reader[2].ToString();

                BETipoProducto tipoProducto = new BETipoProducto(tpcodigo, tpdescripcion);

                String nombre = reader[3].ToString();
                String descripcion = reader[4].ToString();
                BEUnidadProducto unidad = new BEUnidadProducto(1,"KILO");//;reader[5].ToString();
                char estado = reader[6].ToString()[0];

                lista.Add(new BEProducto(codigo, nombre, descripcion, unidad, tipoProducto, estado));
            }
            reader.Close();

            return lista;
        	
            
        
        }


        public List<BETipoProducto> getTipoProductos()
        {
        	
            List<BETipoProducto> lista = new List<BETipoProducto>();

            String cmdStr = "SELECT * FROM TIPOPRODUCTO";
            SqlCommand cmd = new SqlCommand(cmdStr, ConnectionManager.getConnection());

            SqlDataReader reader = cmd.ExecuteReader();

            while (reader.Read())
            {
                int codigo = (int)(reader[0]);
                String descripcion = reader[1].ToString();

                lista.Add(new BETipoProducto(codigo, descripcion));
            }
            reader.Close();

            return lista;
      
        }


        public List<BEProducto> finProducts(int codigoP)
        {
            List<BEProducto> lista = new List<BEProducto>();
            try
            {
                String QueryPrincipal = "select p.idProducto,p.idTipoProducto,p.Descripcion," +
                                      "p.Nombre,p.Estado,p.idUnidadProducto," +
                                      " tp.idTipoProducto,tp.Descripcion," +
                                      "  up.idUnidadProducto,up.Descripcion " +
                                      "FROM " +
                                       "PRODUCTO as p, PRODUCTOXPROVEEDOR as pp ,TIPOPRODUCTO as tp, UNIDADPRODUCTO up " +
                                       "WHERE   p.idProducto= pp.idProducto AND p.idTipoProducto=tp.idTipoProducto " +
                                       "AND p.idUnidadProducto=up.idUnidadProducto AND pp.ESTADO = 'HABILITADO'AND idProveedor=" + codigoP+
                					   " AND p.Estado= \'HABILITADO\'";

                String cmdStr = QueryPrincipal;
                SqlCommand cmd = new SqlCommand(cmdStr, ConnectionManager.getConnection());
                //MessageBox.Show(QueryPrincipal);
                SqlDataReader reader = cmd.ExecuteReader();

                while (reader.Read())
                {
                    int tpcodigo = (int)(reader[6]);
                    String tpdescripcion = reader[7].ToString();
                    BEUnidadProducto Unidad = new BEUnidadProducto(1,"KILO");// reader[9].ToString();

                    BETipoProducto tipoProducto = new BETipoProducto(tpcodigo, tpdescripcion);

                    int codigo = (int)(reader[0]);
                    String nombre = reader[3].ToString();
                    String descripcion = reader[2].ToString();
                    //String estado = reader[4].ToString();

                    lista.Add(new BEProducto(codigo, nombre, descripcion, Unidad, tipoProducto));
                }
                reader.Close();

                return lista;

            }
            catch
            {
                MessageBox.Show(" Error de consulta de productos");
               return lista;

            }

        }

        public float getPrecio(int codigoProd,int codigoProv)
        {
            try
            {
                String cmdStr = "SELECT Precio FROM PRODUCTOXPROVEEDOR WHERE idProducto="+codigoProd+" AND idProveedor="+codigoProv;
                SqlCommand cmd = new SqlCommand(cmdStr, ConnectionManager.getConnection());

                SqlDataReader reader = cmd.ExecuteReader();
                float precio = 0;
                while (reader.Read())
                {
                   precio = (float)Convert.ToDouble(reader[0].ToString());
                }
                reader.Close();

                return precio;
            }
            catch
            {
                MessageBox.Show(" Error de consulta de precio");
                return 0;

            }

        }

        public int actualizarPrecio(int codigoProd, int codigoProv,float precioProd) {

            try
            {
                String cmdStr = "UPDATE PRODUCTOXPROVEEDOR set Precio= \'" + precioProd + "\' WHERE idProducto = \'" + codigoProd + "\' AND idProveedor= \'" + codigoProv + "\'";
                SqlCommand cmd = new SqlCommand(cmdStr, ConnectionManager.getConnection());
                cmd.ExecuteNonQuery();
                return 1;
            }
            catch
            {
                return 2;

            }
        
        }
        
        public bool existeRUC(String ruc){
        
        	try
            {					
                String cmdStr = "SELECT count(*) FROM PROVEEDOR WHERE RUC=\'"+ruc+"\' AND Estado='A'";
                SqlCommand cmd = new SqlCommand(cmdStr, ConnectionManager.getConnection());
                SqlDataReader reader = cmd.ExecuteReader();
				int existe = 0;
				
                while (reader.Read())
                {   
                	existe = (int)(reader[0]);
                }
                reader.Close();
				
                if (existe > 0) return true;
                
				else return false;
                
            }
            catch(Exception ex)
            {
            	
				MessageBox.Show(ex.ToString());
                //MessageBox.Show(" Error de consulta de precio");
                return true;

            }
        
   	
        }

	}
}
